package Stream.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;

/*
现在有两个 ArrayList 集合，分别存储6名男演员和6名女演员，要求完成如下的操作:
1.男演员只要名字为3个字的前两人
2.女演员只要姓林的，并且不要第一个
3.把过滤后的男演员姓名和女演员姓名合并到一起
4.演员类Actor，里面有一个成员变量，一个带参构造方法，以及成员变量对应的get/set方法
5.操作后的元素作为构造方法的参数创建演员对象,遍历数据

 */
public class Practise {
    public static void main(String[] args) {
        ArrayList<String>manList=new ArrayList<>();
        Collections.addAll(manList,"周润发","成龙","刘德华","王宝强","吴京","李连杰");
        ArrayList<String>womanList=new ArrayList<>();
        Collections.addAll(womanList,"林心如","张曼玉","肖月薇","林青霞","柳岩","林志玲");
        //1.男演员只要名字为3个字的前两人
        Stream<String> manLimit = manList.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length() == 3;
            }
        }).limit(2);
        //2.女演员只要姓林的，并且不要第一个
        Stream<String> womanLimit = womanList.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("林");
            }
        }).skip(1);
        //3.把过滤后的男演员姓名和女演员姓名合并到一起
        Stream<String> concat = Stream.concat(manLimit, womanLimit);
        //4.把上一步操作后的元素作为构造方法的参数创建演员对象,遍历数据
        concat.forEach(new Consumer<String>() {
            @Override
            public void accept(String name) {
                Actor actor=new Actor(name);
                System.out.println(actor);
            }
        });
    }
}
